﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DTO.Projectos;
using SGPFWebApp.Controlos.Tipos;
using DTO.Utilizadores;
using DTO;

namespace SGPFWebApp
{
    public partial class AlterarDados : BasePage
    {
        private TipoDeVisualizacao _visualizacaoCorrente = TipoDeVisualizacao.Lista;
        public TipoDeVisualizacao VisualizacaoCorrente { get { return _visualizacaoCorrente; } }
        private Projecto projecto;

        public static string QueryStringParameterName = "projectoId";

        protected void Page_Load(object sender, EventArgs e)
        {
            string projId = Request.QueryString[QueryStringParameterName];
            if (!string.IsNullOrEmpty(projId))
            {
                _visualizacaoCorrente = TipoDeVisualizacao.DetalheProjecto;
                projecto = gestProjs.DevolveProjecto(int.Parse(projId));
            }
        }

        protected void Editar_Click(object sender, EventArgs e)
        {
            Projecto p = CriaProjecto();

            p.ID = projecto.ID;
            
            p.Desc = modifyProjectControl.Descricao;
            p.NIB = modifyProjectControl.Nib;
            p.Promotor = new Promotor
            {
                Nome = modifyProjectControl.NomePromotor,
                Nacionalidade = modifyProjectControl.NacionalidadePromotor
            };
            p.ResponsavelContacto = new ResponsavelContacto
            {
                Nome = modifyProjectControl.NomeRepresentante,
                Email = modifyProjectControl.EmailRepresentante,
                Telefone = modifyProjectControl.TelefoneRepresentante
            };

            p.Gestor = projecto.Gestor;
            p.EstadoActual = projecto.EstadoActual;
            p.EstadoAnterior = projecto.EstadoAnterior;
            p.Accoes = projecto.Accoes;
            p.DataCriacao = projecto.DataCriacao;
            p.DateLimite = projecto.DateLimite;
            p.Tecnico = projecto.Tecnico;

            gestProjs.AlterarDadosProjecto(p, p.EstadoActual);
            projecto = p;
            feedback.Visible = true;
        }

        private Projecto CriaProjecto()
        {
            if (modifyProjectControl.IsIncentivos)
                return new Incentivos { MontantePretendido = double.Parse(modifyProjectControl.Montante) };

            return new Bonificacoes { TaxaPedida = double.Parse(modifyProjectControl.Taxa) };
        }

        protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);

            projectDetail.Visible = VisualizacaoCorrente == TipoDeVisualizacao.DetalheProjecto ? true : false;

            if (projecto != null)
            {
                modifyProjectControl.Projecto = projecto;
                modifyProjectControl.Visible = true;
                modifyProjectControl.Edicao = true;
                projectsListControl.Visible = false;
            }
            else
            {

                IEnumerable<Projecto> projectos = gestProjs.DevolveProjectosParaAlterarDados();
                projectsListControl.QueryStringParamName = QueryStringParameterName;
                projectsListControl.Projectos = projectos.ToList();

                modifyProjectControl.Visible = false;
                projectsListControl.Visible = true;
            }
        }
    }
}
